import fs from "fs";
import path from "path";
import prettier from "prettier";
import { exec } from "child_process";
interface gitConfig {
  /** 文件名 */
  name: string;
  /** 仓库地址 */
  git: string;
  /** 克隆的目标地址 */
  path?: string;
}
/**
 * 克隆模板到本地项目
 * @param config 配置
 */
export function gitClone(config: gitConfig) {
  const { name, git, path } = config;
  const cloneCommand = `git clone  --filter=blob:none ${git} ${path}`;
  exec(cloneCommand, (error, stdout, stderr) => {
    if (error) {
      console.log(`exec error: ${error}`);
      return;
    }
    // fs.access(`${path}/.git`, fs.constants.F_OK, (err) => {
    //   console.log("测试1:", err);
    //   if (err) return;
    //   fs.rm(`${path}/.git`, { recursive: true }, (err) => {
    //     console.log("测试2:", err);
    //     if (err) return;
    //   });
    // });
    console.log(`success: ${name} 创建成功！`);
  });
}
/**
 * 复制模板
 * @param source 模板路径
 * @param target 目标路径
 * @param params 参数
 */
export function copyFolderSync(
  source: string,
  target: string,
  params: { [x: string]: any }
) {
  // 创建目标文件夹
  if (!fs.existsSync(target)) {
    fs.mkdirSync(target);
  }
  // 读取源文件夹
  const files = fs.readdirSync(source);
  // 遍历文件并逐一拷贝
  files.forEach((file: string) => {
    try {
      const sourcePath = path.join(source, file);
      const targetPath = path.join(target, file);
      // 排除文件夹
      // if (sourcePath.includes("api") && !params[DEPS.Axios.key]) {
      //   return;
      // }
      // 如果是目录，则递归拷贝
      if (fs.statSync(sourcePath).isDirectory()) {
        copyFolderSync(sourcePath, targetPath, params);
      } else {
        // 如果是文件，则直接拷贝
        // const ext = path.extname(sourcePath);
        // if (ext.substring(1) === "js") {
        //   const file = require(sourcePath);
        //   const { getContent, getExt } = file;
        //   const content = getContent(params);
        //   const ext = getExt(params);
        //   const fileInfo = path.parse(sourcePath);
        //   const name = `${fileInfo.name}.${ext}`;
        //   fs.writeFileSync(path.join(target, name), content, {
        //     encoding: "utf8",
        //   });
        // } else {
        // }
        fs.copyFileSync(sourcePath, targetPath);
      }
    } catch (error) {
      console.error("拷贝出错：", error);
    }
  });
}
/**
 * 获取解析器
 * @param filePath 文件路径
 * @returns
 */
export function getParser(filePath: string) {
  const ext = path.extname(filePath);
  // 根据文件后缀名选择解析器
  switch (ext) {
    case ".js":
      return "babel";
    case ".ts":
      return "typescript";
    case ".jsx":
      return "babel";
    case ".tsx":
      return "typescript";
    case ".html":
      return "html";
    case ".json":
      return "json";
    // 添加更多文件后缀名和对应的解析器
    default:
      return null; // 如果无法确定解析器，则返回 null
  }
}
/**
 * 代码格式化
 * @param folderPath 文件夹路径
 */
export async function format(folderPath: string) {
  const files = fs.readdirSync(folderPath);
  for (const file of files) {
    const filePath = path.join(folderPath, file);
    const isDirectory = fs.statSync(filePath).isDirectory();
    if (isDirectory) {
      await format(filePath);
    } else {
      const fileContent = fs.readFileSync(filePath, "utf-8");
      const parser = getParser(filePath);
      if (parser) {
        const formattedContent = await prettier.format(fileContent, {
          parser,
        });
        fs.writeFileSync(filePath, formattedContent, "utf-8");
      } else {
      }
    }
  }
}
